home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / uio.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.3 KB  |  58 lines

  1. #ifndef __LINUX_UIO_H
  2. #define __LINUX_UIO_H
  3.  
  4. #include <linux/compiler.h>
  5. #include <linux/types.h>
  6.  
  7. /*
  8.  *    Berkeley style UIO structures    -    Alan Cox 1994.
  9.  *
  10.  *        This program is free software; you can redistribute it and/or
  11.  *        modify it under the terms of the GNU General Public License
  12.  *        as published by the Free Software Foundation; either version
  13.  *        2 of the License, or (at your option) any later version.
  14.  */
  15.  
  16. struct iovec
  17. {
  18.     void __user *iov_base;    /* BSD uses caddr_t (1003.1g requires void *) */
  19.     __kernel_size_t iov_len; /* Must be size_t (1003.1g) */
  20. };
  21.  
  22. #ifdef __KERNEL__
  23.  
  24. struct kvec {
  25.     void *iov_base; /* and that should *never* hold a userland pointer */
  26.     size_t iov_len;
  27. };
  28.  
  29. #endif
  30.  
  31. /*
  32.  *    UIO_MAXIOV shall be at least 16 1003.1g (5.4.1.1)
  33.  */
  34.  
  35. #define UIO_FASTIOV    8
  36. #define UIO_MAXIOV    1024
  37.  
  38. /*
  39.  * Total number of bytes covered by an iovec.
  40.  *
  41.  * NOTE that it is not safe to use this function until all the iovec's
  42.  * segment lengths have been validated.  Because the individual lengths can
  43.  * overflow a size_t when added together.
  44.  */
  45. static inline size_t iov_length(const struct iovec *iov, unsigned long nr_segs)
  46. {
  47.     unsigned long seg;
  48.     size_t ret = 0;
  49.  
  50.     for (seg = 0; seg < nr_segs; seg++)
  51.         ret += iov[seg].iov_len;
  52.     return ret;
  53. }
  54.  
  55. unsigned long iov_shorten(struct iovec *iov, unsigned long nr_segs, size_t to);
  56.  
  57. #endif
  58.